/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package beans;

import java.awt.image.BufferedImage;
import java.awt.image.DataBufferByte;
import java.awt.image.WritableRaster;
import java.io.File;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.imageio.ImageIO;

/**
 *
 * @author Paredes
 */
public class AdmUsuario {
    

public Usuario getUsuario(String userName,String clave){
    Usuario usuario= new Usuario();    
    try {Conexion.conexion();
        Connection conexion=Conexion.getconexion();

        PreparedStatement consult=conexion.prepareStatement("Select p.id_persona,p.nombre,p.apellido,s.username,p.correo,p.id_pais,p.imagen,p.habilitado  from persona p,sesion s where p.id_persona=s.id_persona and s.username= ? and s.clave=?");
        consult.setString(1, userName);
        consult.setString(2,clave);
        ResultSet resultado=consult.executeQuery();
        if(resultado.next()){
            usuario.setId_usuario(resultado.getInt(1));
            usuario.setNombre(resultado.getString(2));
            usuario.setApellido(resultado.getString(3));
            usuario.setUsername(resultado.getString(4));
            usuario.setCorreo(resultado.getString(5));
            usuario.setPais(AdminPais.getPais(resultado.getInt(6),conexion));            
            usuario.setImagen(resultado.getBytes(7));
            usuario.setHabilitado(resultado.getBoolean(8));
            System.out.println("adminUser su estado:"+usuario.isHabilitado());
        }
        resultado.close();
    } catch (Exception e) {
        e.printStackTrace();
    }Conexion.cerrarConexion();
    return usuario;
}

    public ArrayList<Usuario> getUsuariosPorIds(String ids){
        ArrayList<Usuario> usuarios= new ArrayList<Usuario>();    
        try {Conexion.conexion();
            Connection conexion=Conexion.getconexion();
            PreparedStatement consult=conexion.prepareStatement("Select p.id_persona,p.nombre,p.apellido,p.correo from persona p where p.persona_id IN (?)");
            consult.setString(1, ids);
            ResultSet resultado=consult.executeQuery();
            Usuario usuario;
            while(resultado.next()){
                usuario = new Usuario();
                usuario.setId_usuario(resultado.getInt(1));
                usuario.setNombre(resultado.getString(2));
                usuario.setApellido(resultado.getString(3));
                usuario.setUsername(resultado.getString(4));
                usuario.setCorreo(resultado.getString(5));
                
                usuarios.add(usuario);
            }
            resultado.close();
        } catch (Exception e) {
            e.printStackTrace();
        }Conexion.cerrarConexion();
        return usuarios;
    }

public boolean recuperarUserName(String email){
    boolean res = false;
    Usuario usuario= new Usuario();    
    try {Conexion.conexion();
        Connection conexion=Conexion.getconexion();
        PreparedStatement consult=conexion.prepareStatement("select username from sesion where id_persona=(Select id_persona from persona where correo= ?)");
        consult.setString(1, email);
        ResultSet resultado=consult.executeQuery();
        if(resultado.next()){/*
            usuario.setId_usuario(resultado.getInt(1));
            usuario.setNombre(resultado.getString(2));
            usuario.setApellido(resultado.getString(3));*/
            usuario.setUsername(resultado.getString(1));
            
            AdminEmail adminEmail = new AdminEmail();
            adminEmail.enviarCorreoRecordatorioNombreUsuario(usuario.getUsername(), email);
            res = true;
        }
        resultado.close();
    } catch (Exception e) {
        e.printStackTrace();
    }Conexion.cerrarConexion();
    
    return res;
}

    public boolean bajaUsuario(int id,String c)
    {
        boolean res=false;
        try 
        {
            Conexion.conexion();
            Connection conection= Conexion.getconexion();        
            PreparedStatement consulta= conection.prepareStatement("select addsugerencia(?,?,?)");
            consulta.setInt(1,id);
            consulta.setString(2,c);
            consulta.setString(3,"B");
            if(consulta.execute())
            {
                res=true;
            }
            Conexion.cerrarConexion();
        } 
        catch (SQLException e) 
        {
           throw new RuntimeException(e);
        }
        return res;
    }

    public boolean actulizarUsuario(Usuario usuario) {
        boolean res=false;
        
        try {Conexion.conexion();
            Connection conection= Conexion.getconexion();
            PreparedStatement consulta= conection.prepareStatement("select actualizarusuario(?,?,?,?,?,?,?)");
            consulta.setInt(1, usuario.getId_usuario());
            consulta.setString(2, usuario.getNombre());
            consulta.setString(3,usuario.getApellido());
            consulta.setString(4,usuario.getCorreo());            
            consulta.setInt(5,AdminPais.getIdPais(usuario.getPais(),conection));                        
            consulta.setBytes(6,usuario.getImagen());            
            consulta.setString(7,usuario.getUsername()); 
            
            if(consulta.execute()){
            res=true;}
            Conexion.cerrarConexion();
        } catch (SQLException e) {
           throw new RuntimeException(e);
        }
        return res;
    }
    
    
    public boolean registrarUsuario(Usuario usuario)
    {
        boolean res=false;int i=0;int y=0;        

        try {                
                Conexion.conexion();
                Connection conect= Conexion.getconexion();                
                int idP=AdminPais.getIdPais(usuario.getPais(), conect);
                PreparedStatement cons=conect.prepareStatement("select insertardatos(?,?,?,?,?,?);");
                cons.setString(1,usuario.getNombre());
                cons.setString(2,usuario.getApellido());
                cons.setString(3,usuario.getCorreo());
                cons.setInt(4,idP);
                cons.setString(5,usuario.getUsername());
                cons.setString(6,usuario.getClave());
                if(cons.execute())
                {Conexion.cerrarConexion();
                if(emailValido(usuario))
                {
                    AdminEmail email = new AdminEmail();
                    email.enviarCorreoRegistro(usuario.getUsername(), usuario.getCorreo());
                }
                  res=true;
               }      

        } catch (SQLException e) {
            Conexion.cerrarConexion();
            throw new RuntimeException(e);            
        }
        return res;
    }
    
private boolean emailValido(Usuario usuario)
{
        boolean res = true;
        
        try{
            
            Conexion.conexion();
            Connection conect= Conexion.getconexion();
            /*
            PreparedStatement consulta=conect.prepareStatement("insert into persona 
            values(default, ?, ?, ?, ?,?,default,?,?)");
            consulta.setString(1,usuario.getNombre());
            consulta.setString(2,usuario.getApellido());
            consulta.setString(3,usuario.getUsername());
            consulta.setString(4,usuario.getCorreo());            
            consulta.setInt(5,AdminPais.getIdPais(usuario.getPais(),conect));
            //consulta.setBytes(6,null);
            consulta.setBoolean(7,true);
            consulta.setString(6,"vacio.");
            int i=consulta.executeUpdate();
            Conexion.cerrarConexion();
            if(i==1){
            res=true;}
            Connection conect= Conexion.getconexion();         
            */
            
            PreparedStatement consulta1=conect.prepareStatement("select * from persona where correo = ?");
            consulta1.setString(1,usuario.getCorreo());
            ResultSet result = consulta1.executeQuery();
            
            if(result != null && result.next())
            {
                res=false;
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
            
        }
        return res;
    }
    public Usuario getUsuario(String username) {
        Usuario usuario= new Usuario();    
    try {Conexion.conexion();
        Connection conexion=Conexion.getconexion();
        PreparedStatement consult=conexion.prepareStatement("Select imagen from persona where id_persona=(select id_persona from sesion where username= ?)");
        consult.setString(1,username);
        ResultSet resultado=consult.executeQuery();
        if(resultado.next()){            
            usuario.setImagen(resultado.getBytes(1));
        }
        resultado.close();
    } catch (Exception e) {
        e.printStackTrace();
    }Conexion.cerrarConexion();
    return usuario;
    }

}
